# -*- coding: utf-8 -*-

import traceback
from email_ai_api import EmailAIService
import json
import requests

qwen_config = {
            'url': 'https://opensseapi.cmhk.com/CMHK-LMMP-PRD_Qwen3_235B/CMHK-LMMP-PRD/v1/chat/completions',
            'headers': {
                'x-gateway-apikey': 'Bearer MWUwZmI5YzEtOThjOC00ZTNiLWE1ZDItODc3OTkyYzM0MTlm',
                'Content-Type': 'application/json'
            }
        }
def get_test_email_data():
    """构造测试用邮件数据（模拟真实物流邮件内容）"""
    # 测试用委托单号（可根据实际场景修改）
    email_wt = "BOSCH-20240905-001"
    
    # 测试用邮件主题（包含部分物流信息）
    email_subject = "【BOSCH-20240905-001】关于货物出运通知（箱号：FFAU6119411，MBL：OOLU8898091780）"
    
    # 测试用邮件正文（包含完整的物流字段信息，模拟真实沟通场景）
    email_body = """
    尊敬的中外运同事：
    您好！关于委托单号 BOSCH-20240905-001 的货物出运信息如下：
    1. 船名/航次：OOCL AUSTRALIA / 2412S
    2. 预计开航时间（ETD）：9月8日，预计到港时间（ETA）：9月25日
    3. 实际开航时间（ATD）：9月9日，实际到港时间（ATA）：9月26日
    4. 提货日期：9月5日，进仓时间：9月6日，出库时间：9月7日
    5. 箱号：FFAU6119411，封号：CNSHK2436365
    6. 主提单号（MBL）：OOLU8898091780，分提单号（HBL）：STL24082835
    7. 目的港清关完成时间：10月1日，送货时间：10月2日
    
    另请注意：其他委托单号（如 BOSCH-20240905-002）的信息暂未更新，请勿混淆。
    如有疑问，请联系：张三，电话：13800138000
    
    此致
    博世物流部
    2024年9月5日
    """
    
    # 邮件发送日期（用于补全时间字段的年份，格式：年-月-日）
    email_sent_date = "2024-09-05"
    
    return email_wt, email_subject, email_body, email_sent_date


def test_analyze_email_content():
    """测试 analyze_email_content 方法"""
    
    # 2. 获取测试数据
    email_wt, email_subject, email_body, email_sent_date = get_test_email_data()
    """使用通义千问提取邮件字段信息"""
    prompt = f'''1.基于 {email_body}（邮件正文）和 {email_sent_date}（发送日期），识别出你认为正确的提货日期，提货日期和装箱日期意思一致，在邮件正文未明确指出有装箱或提货的相关信息时，不进行提取或推断。2.输出 JSON（键名 “提货日期”），值格式为 'YYYY-MM-DD'，无则赋空'''
    
    body = {
        "messages": [{"role": "user", "content": prompt}],
        "stream": True,
        "temperature": 0.6,
        "top_p": 0.95,
        "top_k": 20,
        "min_p": 0.0,
        "max_tokens": 8192
    }
    
    body_json = json.dumps(body)
    print(f"请求数据：{body}")
    print("="*20)
    response = requests.post(qwen_config["url"], headers=qwen_config["headers"], data=body_json, stream=True, timeout=30)
    result = ""
    if response.status_code == 200:
        for i, line in enumerate(response.iter_lines()):
            if line:
                # 收到数据，更新最后数据时间                    
                decode_line = line.decode('utf-8')[6:]
                try:
                    response_json = json.loads(decode_line)
                    content = response_json.get("choices", [{}])[0].get("delta", {}).get("content", "")
                    result += content
                except json.decoder.JSONDecodeError:
                    pass
        start_pos = result.find("json")
        end_pos = result.find("}")
        if start_pos != -1:
            result = result[start_pos:end_pos + 1]
                
        print(result.replace("```", "").replace("json", "").strip())
    else:
        print(f"请求失败，状态码：{response.status_code}")
    # 3. 初始化 EmailAIService（可根据需求调整重试次数和超时时间）
    # try:
    #     ai_service = EmailAIService(
    #         max_retries=3,          # 减少重试次数，加快测试速度
    #         timeout_seconds=60,     # 延长超时时间，避免网络波动导致失败
    #         timeout_dir="./test_timeout_logs"  # 测试用超时日志目录
    #     )
    #     print("✅ EmailAIService 初始化成功")
    # except Exception as e:
    #     print(f"❌ EmailAIService 初始化失败：{str(e)}")
    #     print(f"详细错误栈：{traceback.format_exc()}")
    #     return
    
    # try:
    #     # 调用方法（核心测试步骤）
    #     result = ai_service.analyze_email_content(
    #         email_wt=email_wt,
    #         email_subject=email_subject,
    #         email_body=email_body,
    #         email_sent_date=email_sent_date,
    #         use_deepseek=False
    #     )
    #     print(f"✅ 方法调用成功，返回原始结果：\n{result}")
    # except Exception as e:
    #     print(f"❌ 方法调用失败：{str(e)}")
    #     print(f"详细错误栈：{traceback.format_exc()}")
    #     return


if __name__ == "__main__":
    # 执行测试
    test_analyze_email_content()